home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / sml_nj / 93src.lha / src / util / arrayext.sml next >
Encoding:
Text File  |  1993-01-27  |  1.4 KB  |  73 lines

  1. (* Copyright 1989,1990,1991 by AT&T Bell Laboratories *)
  2. (* util/arrayext.sml *)
  3.  
  4.  
  5.     (*
  6.      * This module should be merged into the Array module...
  7.      *)
  8.  
  9. signature ARRAYEXT =
  10. sig
  11.   val listofarray : 'a array -> 'a list
  12.   val copy : '1a array  -> '1a array
  13.   val app : ('a -> 'b) * 'a array -> unit
  14.   val remap : ('a -> 'a) * 'a array -> unit
  15.   val reset : 'a array * 'a array -> unit
  16.   val refill : 'a array * 'a -> unit
  17. end
  18.  
  19. structure ArrayExt : ARRAYEXT =
  20. struct
  21.  
  22.   open Array
  23.   infix 9 sub (* Aargh! *)
  24.  
  25.   (* listofarray *)
  26.  
  27.   fun listofarray a =
  28.       let fun loop i = (a sub i)::loop(i+1) handle Subscript => []
  29.       in
  30.     loop 0
  31.       end
  32.  
  33.   (* copy *)
  34.  
  35.   fun copy a =
  36.       if Array.length a=0 then arrayoflist nil
  37.       else
  38.      let val new = array(Array.length a,a sub 0)
  39.         fun loop i = (update(new,i,a sub i); loop(i+1))
  40.      in loop 1
  41.         handle Subscript => new
  42.      end
  43.  
  44.   (* app *)
  45.  
  46.   fun app (f,a) =  
  47.       let fun loop i = (f(a sub i); loop(i+1))
  48.        in loop 0 handle Subscript => ()
  49.       end
  50.  
  51.   (* remap *)
  52.  
  53.   fun remap (f,a) =
  54.       let fun loop i = (update(a,i,f(a sub i)); loop(i+1))
  55.        in loop 0 handle Subscript => ()
  56.       end
  57.  
  58.   (* reset *)
  59.  
  60.   fun reset(target,source) =
  61.     let fun loop n = (update(target,n, source sub n); loop (n+1))
  62.     in loop 0 handle Subscript => ()
  63.     end
  64.  
  65.   (* refill *)
  66.  
  67.   fun refill(target,value) = 
  68.     let fun loop n = (update(target,n,value); loop(n+1))
  69.     in loop 0 handle Subscript => ()
  70.     end
  71.  
  72. end
  73.